<?php
namespace Amis\functions;

use Amis\Basics\AmisBasics;

class AmisApp extends AmisBasics
{
    public string $type = 'app';
    public string $api;
    public string $brandName;
    public string $logo;
    public string $className;
    public array  $header;

    /**
     * 组件运行起始
     * @param $node
     * @return mixed
     */
    public function run($node)
    {
        $node($this);
        return ['app' => $this];
    }

    /**
     * 页面配置接口，如果你想远程拉取页面配置请配置。返回配置路径 json>data>pages，具体格式请参考 pages 属性。
     * @param string $api
     * @return $this
     */
    public function api(string $api)
    {
        $this->api = $api;
        return $this;
    }

    /**
     * 应用名称。
     * @param string $brandName
     * @return $this
     */
    public function brandName(string $brandName)
    {
        $this->brandName = $brandName;
        return $this;
    }

    /**
     * 支持图片地址，或者 svg。
     * @param string $logo
     * @return $this
     */
    public function logo(string $logo)
    {
        $this->logo = $logo;
        return $this;
    }

    /**
     * css 类名。
     * @param string $className
     * @return $this
     */
    public function className(string $className = '')
    {
        $this->className = $className;
        return $this;
    }

    /**
     * 头部展示
     * @param $header
     * @return $this
     */
    public function header(...$header)
    {
        $this->set(__FUNCTION__,...$header);
        return $this;
    }

    /**
     * 页面菜单上前面区域
     * @param array $asideBefore
     * @return $this
     */
    public function asideBefore(array $asideBefore)
    {
        if (is_array($asideBefore)) {
            $this->asideBefore = $asideBefore;
        } else if (is_object($asideBefore)) {
            $this->asideBefore = $asideBefore;
        }
        return $this;
    }

    /**
     * 页面菜单下前面区域
     * @param array $asideAfter
     * @return $this
     */
    public function asideAfter(array $asideAfter)
    {
        if (is_array($asideAfter)) {
            $this->asideAfter = $asideAfter;
        } else if (is_object($asideAfter)) {
            $this->asideAfter = $asideAfter;
        }
        return $this;
    }

    /**
     * 底部展示
     * @param $footer
     * @return $this
     */
    public function footer($footer)
    {
        if (is_array($footer)) {
            $this->footer = $footer;
        } else if (is_object($footer)) {
            $this->footer = $footer;
        }
        return $this;
    }

    /**
     * Array<页面配置>具体的页面配置。 通常为数组，数组第一层为分组，一般只需要配置 label 集合，
     * 如果你不想分组，直接不配置，真正的页面请在第二层开始配置，即第一层的 children 中。
     * 具体的页面配置也支持属性结构，每层有以下配置。
     * @param array $pages
     * @return $this
     */
    public function pages(array $pages)
    {
        $this->pages = $pages;
        return $this;
    }
}